'''
reprlib 模块提供了一个定制化版本的 repr() 函数，用于缩略显示大型或深层嵌套的容器对象，
将容器中的对象按照一定的规律输出 reprlib 模块包含了一个类、一实例对象、一方法
'''
# class reprlib.Repr Repr类, 该类提供格式化服务，对于实现与内置的 repr() 类似的函数很有用;添加了不同对象类型的大小限制，以避免生成过长的表示。
from reprlib import recursive_repr
# eprlib.repr(obj) Repr 类的实例，用于提供下面描述的 Repr() 函数。更改此对象的属性将影响 repr() 和 Python 调试器使用的大小限制。
# @reprlib.recursive_repr(fillvalue=”…”)方法的装饰器，用于检测同一线程中的递归调用。如果执行递归调用，则返回fillvalue，否则执行通常的调用。
class MyList(list):
    @recursive_repr()
    def __repr__(self):
        return '<' + '|'.join(map(repr, self)) + '>'
m = MyList('abc')
m.append(m)
m.append('x')
# print(m)
'''
Repr.maxlevel — 递归表示的深度限制，默认是6
Repr.maxdict
Repr.maxlist
Repr.maxtuple
Repr.maxset
Repr.maxfrozenset
Repr.maxdeque
Repr.maxarray —-命名对象类型的条目数限制，maxdict是4，maxarray是5，其它是6
Repr.maxlong —- 表示一个整数最大字符数，默认40
Repr.maxstring —- 表示一个字符串最大字符数，默认30
Repr.maxother —- 表示其他类型的最大字符数，默认20
'''

# 递归实例演示
import reprlib
a = [1,2,3,[4,5],6,7]
reprlib.aRepr.maxlevel = 1
# print(reprlib.repr(a))

# pprint模块
'''
pprint 模块提供了更加复杂的打印控制，其输出的内置对象和用户自定义对象能够被解释器直接读取。
当输出结果过长而需要折行时，“美化输出机制”会添加换行符和缩进，以更清楚地展示数据结构
'''
import pprint
data = ('test',[1,2,3,'test',4,5],'This is a string!',{'age':23,'gender':'F'})
# print(data)
# pprint.pprint(data)

# TODO 十进制浮点运算
'''
财务应用和其他需要精确十进制表示的用途，

控制精度，

控制四舍五入以满足法律或监管要求，

跟踪有效小数位，或

用户期望结果与手工完成的计算相匹配的应用程序。
'''